home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
ELECTRIC
/
DSPICE0S.ZIP
/
moseq2.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-11-22
|
34KB
|
1,058 lines
/* moseq2.f -- translated by f2c (version of 3 February 1990 3:36:42).
You must link the resulting object file with the libraries:
-lF77 -lI77 -lm -lc (in that order)
*/
#include "f2c.h"
/* Common Block Declarations */
struct {
doublereal vto, beta, gamma, phi, phib, cox, xnsub, xnfs, xd, xj, xld,
xlamda, uo, uexp, vbp, utra, vmax, xneff, xl, xw, vbi, von, vdsat,
qspof, beta0, beta1, cdrain, xqco, xqc, fnarrw, fshort;
integer lev;
} mosarg_;
#define mosarg_1 mosarg_
struct {
doublereal omega, time, delta, delold[7], ag[7], vt, xni, egfet, xmu,
sfactr;
integer mode, modedc, icalc, initf, method, iord, maxord, noncon, iterno,
itemno, nosolv, modac, ipiv, ivmflg, ipostp, iscrch, iofile;
} status_;
#define status_1 status_
struct {
doublereal twopi, xlog2, xlog10, root2, rad, boltz, charge, ctok, gmin,
reltol, abstol, vntol, trtol, chgtol, eps0, epssil, epsox, pivtol,
pivrel;
} knstnt_;
#define knstnt_1 knstnt_
/*< subroutine moseq2(vds,vbs,vgs,gm,gds,gmbs, >*/
/*< 1 qg,qc,qb,cggb,cgdb,cgsb,cbgb,cbdb,cbsb) >*/
/* Subroutine */ int moseq2_(vds, vbs, vgs, gm, gds, gmbs, qg, qc, qb, cggb,
cgdb, cgsb, cbgb, cbdb, cbsb)
doublereal *vds, *vbs, *vgs, *gm, *gds, *gmbs, *qg, *qc, *qb, *cggb, *cgdb, *
cgsb, *cbgb, *cbdb, *cbsb;
{
/* Initialized data */
static doublereal sig1[4] = { 1.,-1.,1.,-1. };
static doublereal sig2[4] = { 1.,1.,-1.,-1. };
/* System generated locals */
integer i_1;
doublereal d_1;
/* Builtin functions */
double sqrt(), log(), exp(), atan(), cos();
/* Local variables */
static doublereal barg, argd, argg, ueff, sarg, vbin, args, body, sphi,
argv;
static integer iknt, jknt;
static doublereal expg, vpof, vgst, vgsx, sarg3, argv1, sphi3, d2bdb2, a,
b, c;
extern /* Subroutine */ int mosq2_();
static doublereal poly4[8];
static integer i, j;
static doublereal d2sdb2, p, r, s, gdbdv, dfact, bsarg, argsd, ufact,
xleff, argxd, cdson, dbxwd, ddxwd, gdson, argsq, gbson, argss,
tsarg, daddb2, a1, argxs, a4[4], b4[4], dgddb2, dbxws, b1, c1,
dasdb2, d1, r3, s2, gammd2, v1, v2, p0, p2, x4[8], y3, p3, p4, a3,
b3, delta4, bodys, sargv, vdson, vdsat1, fi, dbrgdb, dbargd,
dgddvb;
static integer icharg;
static doublereal gamasd, gammad, ro, dsrgdb, dbargs, dgdvds, gamass,
factor, dgsdvb, cdonco, xn, sbiarg, dgdvbs, dodvbs, dxndvb,
dxndvd, dodvds, udenom, dudvgs, dudvds, dudvbs, dsdvgs, dsdvbs,
xv, xvalid, dbsrdb, gdbdvs, xlfact, dldsat, vqchan, dqdsat, vl,
dfunds, dfundg, dfundb, dldvgs, dldvds, dldvbs, clfact, deltal,
didvds;
extern /* Subroutine */ int mqspof_();
static doublereal eta, arg, cfs, gmw, xwb, vth, xwd, xdv, xls, xlv, xws,
arg1, arg2;
/*< implicit double precision (a-h,o-z) >*/
/* this routine evaluates the drain current, its derivatives and */
/* the charges associated with the gate, channel and bulk */
/* for mosfets */
/* spice version 2g.6 sccsid=mosarg 3/15/83 */
/*< common /mosarg/ vto,beta,gamma,phi,phib,cox,xnsub,xnfs,xd,xj,xld, >*/
/*< 1 xlamda,uo,uexp,vbp,utra,vmax,xneff,xl,xw,vbi,von,vdsat,qspof, >*/
/*< 2 beta0,beta1,cdrain,xqco,xqc,fnarrw,fshort,lev >*/
/* spice version 2g.6 sccsid=status 3/15/83 */
/*< common /status/ omega,time,delta,delold(7),ag(7),vt,xni,egfet, >*/
/*< 1 xmu,sfactr,mode,modedc,icalc,initf,method,iord,maxord,noncon, >*/
/*< 2 iterno,itemno,nosolv,modac,ipiv,ivmflg,ipostp,iscrch,iofile >*/
/* spice version 2g.6 sccsid=knstnt 3/15/83 */
/*< common /knstnt/ twopi,xlog2,xlog10,root2,rad,boltz,charge,ctok, >*/
/*< 1 gmin,reltol,abstol,vntol,trtol,chgtol,eps0,epssil,epsox, >*/
/*< 2 pivtol,pivrel >*/
/*< dimension a4(4),b4(4),x4(8),poly4(8),sig1(4),sig2(4) >*/
/*< data sig1 / 1.0d0, -1.0d0, 1.0d0, -1.0d0/, >*/
/*< 1 sig2 / 1.0d0, 1.0d0,-1.0d0, -1.0d0/ >*/
/* icharg=1 causes charges to be computed */
/* icharg=0 bypasses the computation of charges */
/*< icharg=1 >*/
icharg = 1;
/*< if (mode.ne.1.and.xqco.le.0.5d0) go to 100 >*/
if (status_1.mode != 1 && mosarg_1.xqco <= .5) {
goto L100;
}
/*< icharg=0 >*/
icharg = 0;
/*< if (xqco.gt.0.5d0) go to 100 >*/
if (mosarg_1.xqco > .5) {
goto L100;
}
/*< if (modedc.eq.2.and.nosolv.ne.0) icharg=1 >*/
if (status_1.modedc == 2 && status_1.nosolv != 0) {
icharg = 1;
}
/*< if (initf.eq.4) icharg=1 >*/
if (status_1.initf == 4) {
icharg = 1;
}
/* compute some useful quantities */
/*< 100 if (vbs.gt.0.0d0) go to 110 >*/
L100:
if (*vbs > 0.) {
goto L110;
}
/*< sarg=dsqrt(phi-vbs) >*/
sarg = sqrt(mosarg_1.phi - *vbs);
/*< tsarg=sarg+sarg >*/
tsarg = sarg + sarg;
/*< dsrgdb=-0.5d0/sarg >*/
dsrgdb = -.5 / sarg;
/*< d2sdb2=+0.5d0*dsrgdb/(phi-vbs) >*/
d2sdb2 = dsrgdb * .5 / (mosarg_1.phi - *vbs);
/*< go to 120 >*/
goto L120;
/*< 110 sphi=dsqrt(phi) >*/
L110:
sphi = sqrt(mosarg_1.phi);
/*< sphi3=phi*sphi >*/
sphi3 = mosarg_1.phi * sphi;
/*< sarg=sphi/(1.0d0+0.5d0*vbs/phi) >*/
sarg = sphi / (*vbs * .5 / mosarg_1.phi + 1.);
/*< tsarg=sarg+sarg >*/
tsarg = sarg + sarg;
/*< dsrgdb=-0.5d0*sarg*sarg/sphi3 >*/
dsrgdb = sarg * -.5 * sarg / sphi3;
/*< d2sdb2=-dsrgdb*sarg/sphi3 >*/
d2sdb2 = -dsrgdb * sarg / sphi3;
/*< 120 if ((vds-vbs).lt.0.0d0) go to 130 >*/
L120:
if (*vds - *vbs < 0.) {
goto L130;
}
/*< barg=dsqrt(phi+vds-vbs) >*/
barg = sqrt(mosarg_1.phi + *vds - *vbs);
/*< dbrgdb=-0.5d0/barg >*/
dbrgdb = -.5 / barg;
/*< d2bdb2=+0.5d0*dbrgdb/(phi+vds-vbs) >*/
d2bdb2 = dbrgdb * .5 / (mosarg_1.phi + *vds - *vbs);
/*< go to 200 >*/
goto L200;
/*< 130 barg=sphi/(1.0d0+0.5d0*(vbs-vds)/phi) >*/
L130:
barg = sphi / ((*vbs - *vds) * .5 / mosarg_1.phi + 1.);
/*< dbrgdb=-0.5d0*barg*barg/sphi3 >*/
dbrgdb = barg * -.5 * barg / sphi3;
/*< d2bdb2=-dbrgdb*barg/sphi3 >*/
d2bdb2 = -dbrgdb * barg / sphi3;
/* calculate threshold voltage (von) */
/* narrow-channel effect */
/*< 200 factor=0.125d0*fnarrw*twopi*epssil/cox*xl >*/
L200:
factor = mosarg_1.fnarrw * .125 * knstnt_1.twopi * knstnt_1.epssil /
mosarg_1.cox * mosarg_1.xl;
/*< eta=1.0d0+factor >*/
eta = factor + 1.;
/*< vbin=vbi+factor*(phi-vbs) >*/
vbin = mosarg_1.vbi + factor * (mosarg_1.phi - *vbs);
/*< if (gamma.le.0.0d0) go to 215 >*/
if (mosarg_1.gamma <= 0.) {
goto L215;
}
/*< if (xnsub.le.0.0d0) go to 215 >*/
if (mosarg_1.xnsub <= 0.) {
goto L215;
}
/*< xwd=xd*barg >*/
xwd = mosarg_1.xd * barg;
/*< xws=xd*sarg >*/
xws = mosarg_1.xd * sarg;
/* short-channel effect with vds .ne. 0.0d0 */
/*< argss=0.0d0 >*/
argss = 0.;
/*< argsd=0.0d0 >*/
argsd = 0.;
/*< dbargs=0.0d0 >*/
dbargs = 0.;
/*< dbargd=0.0d0 >*/
dbargd = 0.;
/*< dgdvds=0.0d0 >*/
dgdvds = 0.;
/*< dgddb2=0.0d0 >*/
dgddb2 = 0.;
/*< if (xj.le.0.0d0) go to 205 >*/
if (mosarg_1.xj <= 0.) {
goto L205;
}
/*< argxs=1.0d0+2.0d0*xws/xj >*/
argxs = xws * 2. / mosarg_1.xj + 1.;
/*< args=dsqrt(argxs) >*/
args = sqrt(argxs);
/*< argss=0.5d0*xj/xl*(args-1.0d0) >*/
argss = mosarg_1.xj * .5 / mosarg_1.xl * (args - 1.);
/*< argxd=1.0d0+2.0d0*xwd/xj >*/
argxd = xwd * 2. / mosarg_1.xj + 1.;
/*< argd=dsqrt(argxd) >*/
argd = sqrt(argxd);
/*< argsd=0.5d0*xj/xl*(argd-1.0d0) >*/
argsd = mosarg_1.xj * .5 / mosarg_1.xl * (argd - 1.);
/*< 205 gamasd=gamma*(1.0d0-argss-argsd) >*/
L205:
gamasd = mosarg_1.gamma * (1. - argss - argsd);
/*< gamass=gamma*(1.0d0-2.0d0*argss) >*/
gamass = mosarg_1.gamma * (1. - argss * 2.);
/*< dbxwd=xd*dbrgdb >*/
dbxwd = mosarg_1.xd * dbrgdb;
/*< dbxws=xd*dsrgdb >*/
dbxws = mosarg_1.xd * dsrgdb;
/*< if (xj.le.0.0d0) go to 210 >*/
if (mosarg_1.xj <= 0.) {
goto L210;
}
/*< dbargs=0.5d0/xl*dbxws/args >*/
dbargs = .5 / mosarg_1.xl * dbxws / args;
/*< dbargd=0.5d0/xl*dbxwd/argd >*/
dbargd = .5 / mosarg_1.xl * dbxwd / argd;
/*< dasdb2=-xd*( d2sdb2+dsrgdb*dsrgdb*xd/(xj*argxs) )/(xl*args) >*/
dasdb2 = -mosarg_1.xd * (d2sdb2 + dsrgdb * dsrgdb * mosarg_1.xd / (
mosarg_1.xj * argxs)) / (mosarg_1.xl * args);
/*< daddb2=-xd*( d2bdb2+dbrgdb*dbrgdb*xd/(xj*argxd) )/(xl*argd) >*/
daddb2 = -mosarg_1.xd * (d2bdb2 + dbrgdb * dbrgdb * mosarg_1.xd / (
mosarg_1.xj * argxd)) / (mosarg_1.xl * argd);
/*< dgddb2=-0.5d0*gamma*(dasdb2+daddb2) >*/
dgddb2 = mosarg_1.gamma * -.5 * (dasdb2 + daddb2);
/*< 210 dgddvb=-gamma*(dbargs+dbargd) >*/
L210:
dgddvb = -mosarg_1.gamma * (dbargs + dbargd);
/*< dgsdvb=-2.0d0*gamma*dbargs >*/
dgsdvb = mosarg_1.gamma * -2. * dbargs;
/*< if (xj.le.0.0d0) go to 220 >*/
if (mosarg_1.xj <= 0.) {
goto L220;
}
/*< ddxwd=-dbxwd >*/
ddxwd = -dbxwd;
/*< dgdvds=-gamma*0.5d0/xl*ddxwd/argd >*/
dgdvds = -mosarg_1.gamma * .5 / mosarg_1.xl * ddxwd / argd;
/*< go to 220 >*/
goto L220;
/*< 215 gamasd=gamma >*/
L215:
gamasd = mosarg_1.gamma;
/*< gamass=gamma >*/
gamass = mosarg_1.gamma;
/*< gammad=gamma >*/
gammad = mosarg_1.gamma;
/*< dgddvb=0.0d0 >*/
dgddvb = 0.;
/*< dgsdvb=0.0d0 >*/
dgsdvb = 0.;
/*< dgdvds=0.0d0 >*/
dgdvds = 0.;
/*< dgddb2=0.0d0 >*/
dgddb2 = 0.;
/*< 220 von=vbin+gamasd*sarg >*/
L220:
mosarg_1.von = vbin + gamasd * sarg;
/* write(iofile,221) von,vbin,vbi,gamasd,argss,argsd,xj */
/*< 221 format ('0msg1:'/1p7d10.2) >*/
/* L221: */
/*< vth=von >*/
vth = mosarg_1.von;
/*< vdsat=0.0d0 >*/
mosarg_1.vdsat = 0.;
/*< 225 if (xnfs.eq.0.0d0.or.cox.eq.0.0d0) go to 230 >*/
/* L225: */
if (mosarg_1.xnfs == 0. || mosarg_1.cox == 0.) {
goto L230;
}
/*< cfs=charge*xnfs >*/
cfs = knstnt_1.charge * mosarg_1.xnfs;
/*< cdonco=-(gamasd*dsrgdb+dgddvb*sarg)+factor >*/
cdonco = -(gamasd * dsrgdb + dgddvb * sarg) + factor;
/*< xn=1.0d0+cfs/cox*xw*xl+cdonco >*/
xn = cfs / mosarg_1.cox * mosarg_1.xw * mosarg_1.xl + 1. + cdonco;
/*< von=von+vt*xn >*/
mosarg_1.von += status_1.vt * xn;
/* write (iofile,226) von,cdonco,xn,cfs,xd */
/*< 226 format(' msg2:'/1p6d10.2) >*/
/* L226: */
/*< argg=1.0d0/(vt*xn) >*/
argg = 1. / (status_1.vt * xn);
/*< vgst=vgs-von >*/
vgst = *vgs - mosarg_1.von;
/*< go to 300 >*/
goto L300;
/*< 230 vgst=vgs-von >*/
L230:
vgst = *vgs - mosarg_1.von;
/*< if (vgs.gt.von) go to 300 >*/
if (*vgs > mosarg_1.von) {
goto L300;
}
/* cutoff region */
/*< gds=0.0d0 >*/
*gds = 0.;
/*< go to 1050 >*/
goto L1050;
/* compute some more useful quantities */
/*< 300 sarg3=sarg*sarg*sarg >*/
L300:
sarg3 = sarg * sarg * sarg;
/*< sbiarg=dsqrt(phib) >*/
sbiarg = sqrt(mosarg_1.phib);
/*< gammad=gamasd >*/
gammad = gamasd;
/*< dgdvbs=dgddvb >*/
dgdvbs = dgddvb;
/*< body=barg*barg*barg-sarg3 >*/
body = barg * barg * barg - sarg3;
/*< gdbdv=2.0d0*gammad*(barg*barg*dbrgdb-sarg*sarg*dsrgdb) >*/
gdbdv = gammad * 2. * (barg * barg * dbrgdb - sarg * sarg * dsrgdb);
/*< dodvbs=-factor+dgdvbs*sarg+gammad*dsrgdb >*/
dodvbs = -factor + dgdvbs * sarg + gammad * dsrgdb;
/*< if (xnfs.eq.0.0d0) go to 400 >*/
if (mosarg_1.xnfs == 0.) {
goto L400;
}
/*< if (cox.eq.0.0d0) go to 410 >*/
if (mosarg_1.cox == 0.) {
goto L410;
}
/*< dxndvb=2.0d0*dgdvbs*dsrgdb+gammad*d2sdb2+dgddb2*sarg >*/
dxndvb = dgdvbs * 2. * dsrgdb + gammad * d2sdb2 + dgddb2 * sarg;
/*< dodvbs=dodvbs+vt*dxndvb >*/
dodvbs += status_1.vt * dxndvb;
/*< dxndvd=dgdvds*dsrgdb >*/
dxndvd = dgdvds * dsrgdb;
/*< dodvds=dgdvds*sarg+vt*dxndvd >*/
dodvds = dgdvds * sarg + status_1.vt * dxndvd;
/* evaluate effective mobility and its derivatives */
/*< 400 if (cox.le.0.0d0) go to 410 >*/
L400:
if (mosarg_1.cox <= 0.) {
goto L410;
}
/*< udenom=vgst >*/
udenom = vgst;
/*< if (udenom.le.vbp) go to 410 >*/
if (udenom <= mosarg_1.vbp) {
goto L410;
}
/*< ufact=dexp(uexp*dlog(vbp/udenom)) >*/
ufact = exp(mosarg_1.uexp * log(mosarg_1.vbp / udenom));
/*< ueff=uo*ufact >*/
ueff = mosarg_1.uo * ufact;
/*< dudvgs=-ufact*uexp/udenom >*/
dudvgs = -ufact * mosarg_1.uexp / udenom;
/*< dudvds=0.0d0 >*/
dudvds = 0.;
/*< dudvbs=uexp*ufact*dodvbs/vgst >*/
dudvbs = mosarg_1.uexp * ufact * dodvbs / vgst;
/*< go to 500 >*/
goto L500;
/*< 410 ufact=1.0d0 >*/
L410:
ufact = 1.;
/*< ueff=uo >*/
ueff = mosarg_1.uo;
/*< dudvgs=0.0d0 >*/
dudvgs = 0.;
/*< dudvds=0.0d0 >*/
dudvds = 0.;
/*< dudvbs=0.0d0 >*/
dudvbs = 0.;
/* evaluate saturation voltage and its derivatives according to */
/* grove-frohman equation */
/*< 500 vgsx=vgs >*/
L500:
vgsx = *vgs;
/*< gammad=gamasd/eta >*/
gammad = gamasd / eta;
/*< dgdvbs=dgddvb >*/
dgdvbs = dgddvb;
/*< if (xnfs.ne.0.0d0.and.cox.ne.0.0d0) >*/
/*< 1 vgsx=dmax1(vgs,von) >*/
if (mosarg_1.xnfs != 0. && mosarg_1.cox != 0.) {
vgsx = max(*vgs,mosarg_1.von);
}
/*< 505 if (gammad.le.0.0d0) go to 535 >*/
/* L505: */
if (gammad <= 0.) {
goto L535;
}
/*< gammd2=gammad*gammad >*/
gammd2 = gammad * gammad;
/*< argv=(vgsx-vbin)/eta+phi-vbs >*/
argv = (vgsx - vbin) / eta + mosarg_1.phi - *vbs;
/*< if (argv.le.0.0d0) go to 540 >*/
if (argv <= 0.) {
goto L540;
}
/*< arg=dsqrt(1.0d0+4.0d0*argv/gammd2) >*/
arg = sqrt(argv * 4. / gammd2 + 1.);
/*< vdsat=(vgsx-vbin)/eta+gammd2*(1.0d0-arg)/2.0d0 >*/
mosarg_1.vdsat = (vgsx - vbin) / eta + gammd2 * (1. - arg) / 2.;
/*< vdsat=dmax1(vdsat,0.0d0) >*/
mosarg_1.vdsat = max(mosarg_1.vdsat,0.);
/*< 510 if (icharg.eq.0) go to 530 >*/
/* L510: */
if (icharg == 0) {
goto L530;
}
/*< arg1=gammd2/(eta*eta) >*/
arg1 = gammd2 / (eta * eta);
/*< arg2=vds-0.5d0*arg1 >*/
arg2 = *vds - arg1 * .5;
/*< argsq=(arg2+0.5d0*arg1+phi-vbs)*arg1 >*/
argsq = (arg2 + arg1 * .5 + mosarg_1.phi - *vbs) * arg1;
/*< if (argsq.ge.0.0d0) go to 515 >*/
if (argsq >= 0.) {
goto L515;
}
/*< vpof=vth >*/
vpof = vth;
/*< go to 520 >*/
goto L520;
/*< 515 vpof=vbin+eta*(arg2+0.5d0*arg1+dsqrt(argsq)) >*/
L515:
vpof = vbin + eta * (arg2 + arg1 * .5 + sqrt(argsq));
/*< 520 argv1=(vpof-vbin)/eta+phi-vbs >*/
L520:
argv1 = (vpof - vbin) / eta + mosarg_1.phi - *vbs;
/*< if (argv1.gt.0.0d0) go to 525 >*/
if (argv1 > 0.) {
goto L525;
}
/*< vdsat1=0.0d0 >*/
vdsat1 = 0.;
/*< go to 530 >*/
goto L530;
/*< 525 arg1=dsqrt(1.0d0+4.0d0*argv1/gammd2) >*/
L525:
arg1 = sqrt(argv1 * 4. / gammd2 + 1.);
/*< vdsat1=(vpof-vbin)/eta+gammd2*(1.0d0-arg1)/2.0d0 >*/
vdsat1 = (vpof - vbin) / eta + gammd2 * (1. - arg1) / 2.;
/*< vdsat1=dmax1(vdsat1,0.0d0) >*/
vdsat1 = max(vdsat1,0.);
/*< 530 dsdvgs=(1.0d0-1.0d0/arg)/eta >*/
L530:
dsdvgs = (1. - 1. / arg) / eta;
/*< dsdvbs=(gammad*(1.0d0-arg)+2.0d0*argv/(gammad*arg))/eta*dgdvbs+ >*/
/*< 1 1.0d0/arg+factor*dsdvgs >*/
dsdvbs = (gammad * (1. - arg) + argv * 2. / (gammad * arg)) / eta *
dgdvbs + 1. / arg + factor * dsdvgs;
/*< go to 545 >*/
goto L545;
/*< 535 vdsat=dmax1((vgsx-vbin)/eta,0.0d0) >*/
L535:
/* Computing MAX */
d_1 = (vgsx - vbin) / eta;
mosarg_1.vdsat = max(0.,d_1);
/*< vpof=dmax1((eta*vds+vbin),0.0d0) >*/
/* Computing MAX */
d_1 = eta * *vds + vbin;
vpof = max(0.,d_1);
/*< vdsat1=dmax1((vpof-vbin)/eta,0.0d0) >*/
/* Computing MAX */
d_1 = (vpof - vbin) / eta;
vdsat1 = max(0.,d_1);
/*< dsdvgs=1.0d0 >*/
dsdvgs = 1.;
/*< dsdvbs=0.0d0 >*/
dsdvbs = 0.;
/*< go to 545 >*/
goto L545;
/*< 540 vdsat=0.0d0 >*/
L540:
mosarg_1.vdsat = 0.;
/*< vpof=vth >*/
vpof = vth;
/*< vdsat1=0.0d0 >*/
vdsat1 = 0.;
/*< dsdvgs=0.0d0 >*/
dsdvgs = 0.;
/*< dsdvbs=0.0d0 >*/
dsdvbs = 0.;
/* store vdsat as above in vpof (pinch-off) */
/*< 545 if (vmax.le.0.0d0) go to 600 >*/
L545:
if (mosarg_1.vmax <= 0.) {
goto L600;
}
/* evaluate saturation voltage and its derivatives according to */
/* baum's theory of scattering velocity saturation */
/*< gammd2=gammad*gammad >*/
gammd2 = gammad * gammad;
/*< v1=(vgsx-vbin)/eta+phi-vbs >*/
v1 = (vgsx - vbin) / eta + mosarg_1.phi - *vbs;
/*< v2=phi-vbs >*/
v2 = mosarg_1.phi - *vbs;
/*< xv=vmax*xl/ueff >*/
xv = mosarg_1.vmax * mosarg_1.xl / ueff;
/*< a1=gammad/0.75d0 >*/
a1 = gammad / .75;
/*< b1=-2.0d0*(v1+xv) >*/
b1 = (v1 + xv) * -2.;
/*< c1=-2.0d0*gammad*xv >*/
c1 = gammad * -2. * xv;
/*< d1=2.0d0*v1*(v2+xv)-v2*v2-4.0d0/3.0d0*gammad*sarg3 >*/
d1 = v1 * 2. * (v2 + xv) - v2 * v2 - gammad * 1.3333333333333333 * sarg3;
/*< a=-b1 >*/
a = -b1;
/*< b=a1*c1-4.0d0*d1 >*/
b = a1 * c1 - d1 * 4.;
/*< c=-d1*(a1*a1-4.0d0*b1)-c1*c1 >*/
c = -d1 * (a1 * a1 - b1 * 4.) - c1 * c1;
/*< r=-a*a/3.0d0+b >*/
r = -a * a / 3. + b;
/*< s=2.0d0*a*a*a/27.0d0-a*b/3.0d0+c >*/
s = a * 2. * a * a / 27. - a * b / 3. + c;
/*< r3=r*r*r >*/
r3 = r * r * r;
/*< s2=s*s >*/
s2 = s * s;
/*< p=s2/4.0d0+r3/27.0d0 >*/
p = s2 / 4. + r3 / 27.;
/*< p0=dabs(p) >*/
p0 = abs(p);
/*< p2=dsqrt(p0) >*/
p2 = sqrt(p0);
/*< if (p.ge.0.0d0) go to 550 >*/
if (p >= 0.) {
goto L550;
}
/*< ro=dsqrt(s2/4.0d0+p0) >*/
ro = sqrt(s2 / 4. + p0);
/*< ro=dlog(ro)/3.0d0 >*/
ro = log(ro) / 3.;
/*< ro=dexp(ro) >*/
ro = exp(ro);
/*< fi=datan(-2.0d0*p2/s) >*/
fi = atan(p2 * -2. / s);
/*< y3=2.0d0*ro*dcos(fi/3.0d0)-a/3.0d0 >*/
y3 = ro * 2. * cos(fi / 3.) - a / 3.;
/*< go to 560 >*/
goto L560;
/*< 550 p3=dexp(dlog(dabs(-s/2.0d0+p2))/3.0d0) >*/
L550:
p3 = exp(log((d_1 = -s / 2. + p2, abs(d_1))) / 3.);
/*< p4=dexp(dlog(dabs(-s/2.0d0-p2))/3.0d0) >*/
p4 = exp(log((d_1 = -s / 2. - p2, abs(d_1))) / 3.);
/*< y3=p3+p4-a/3.0d0 >*/
y3 = p3 + p4 - a / 3.;
/*< 560 iknt=0 >*/
L560:
iknt = 0;
/*< a3=dsqrt(a1*a1/4.0d0-b1+y3) >*/
a3 = sqrt(a1 * a1 / 4. - b1 + y3);
/*< b3=dsqrt(y3*y3/4.0d0-d1) >*/
b3 = sqrt(y3 * y3 / 4. - d1);
/*< do 570 i=1,4 >*/
for (i = 1; i <= 4; ++i) {
/*< a4(i)=a1/2.0d0+sig1(i)*a3 >*/
a4[i - 1] = a1 / 2. + sig1[i - 1] * a3;
/*< b4(i)=y3/2.0d0+sig2(i)*b3 >*/
b4[i - 1] = y3 / 2. + sig2[i - 1] * b3;
/*< delta4=a4(i)*a4(i)/4.0d0-b4(i) >*/
delta4 = a4[i - 1] * a4[i - 1] / 4. - b4[i - 1];
/*< if (delta4.lt.0.0d0) go to 570 >*/
if (delta4 < 0.) {
goto L570;
}
/*< iknt=iknt+1 >*/
++iknt;
/*< x4(iknt)=-a4(i)/2.0d0+dsqrt(delta4) >*/
x4[iknt - 1] = -a4[i - 1] / 2. + sqrt(delta4);
/*< iknt=iknt+1 >*/
++iknt;
/*< x4(iknt)=-a4(i)/2.0d0-dsqrt(delta4) >*/
x4[iknt - 1] = -a4[i - 1] / 2. - sqrt(delta4);
/*< 570 continue >*/
L570:
;}
/*< jknt=0 >*/
jknt = 0;
/*< do 580 j=1,iknt >*/
i_1 = iknt;
for (j = 1; j <= i_1; ++j) {
/*< if (x4(j).le.0.0d0) go to 580 >*/
if (x4[j - 1] <= 0.) {
goto L580;
}
/*< poly4(j)=x4(j)*x4(j)*x4(j)*x4(j)+a1*x4(j)*x4(j)*x4(j) >*/
poly4[j - 1] = x4[j - 1] * x4[j - 1] * x4[j - 1] * x4[j - 1] + a1 *
x4[j - 1] * x4[j - 1] * x4[j - 1];
/*< poly4(j)=poly4(j)+b1*x4(j)*x4(j)+c1*x4(j)+d1 >*/
poly4[j - 1] = poly4[j - 1] + b1 * x4[j - 1] * x4[j - 1] + c1 * x4[j
- 1] + d1;
/*< if (dabs(poly4(j)).gt.1.0d-6) go to 580 >*/
if ((d_1 = poly4[j - 1], abs(d_1)) > 1e-6) {
goto L580;
}
/*< jknt=jknt+1 >*/
++jknt;
/*< if (jknt.gt.1) go to 575 >*/
if (jknt > 1) {
goto L575;
}
/*< xvalid=x4(j) >*/
xvalid = x4[j - 1];
/*< 575 if (x4(j).gt.xvalid) go to 580 >*/
L575:
if (x4[j - 1] > xvalid) {
goto L580;
}
/*< xvalid=x4(j) >*/
xvalid = x4[j - 1];
/*< 580 continue >*/
L580:
;}
/*< if (jknt.gt.0) go to 590 >*/
if (jknt > 0) {
goto L590;
}
/*< ivmflg=ivmflg+1 >*/
++status_1.ivmflg;
/*< go to 600 >*/
goto L600;
/*< 590 vdsat=xvalid*xvalid+vbs-phi >*/
L590:
mosarg_1.vdsat = xvalid * xvalid + *vbs - mosarg_1.phi;
/* evaluate effective channel length and its derivatives */
/*< 600 if (vds.eq.0.0d0) go to 610 >*/
L600:
if (*vds == 0.) {
goto L610;
}
/*< gammad=gamasd >*/
gammad = gamasd;
/*< if ((vbs-vdsat).gt.0.0d0) go to 601 >*/
if (*vbs - mosarg_1.vdsat > 0.) {
goto L601;
}
/*< bsarg=dsqrt(vdsat-vbs+phi) >*/
bsarg = sqrt(mosarg_1.vdsat - *vbs + mosarg_1.phi);
/*< dbsrdb=-0.5d0/bsarg >*/
dbsrdb = -.5 / bsarg;
/*< go to 602 >*/
goto L602;
/*< 601 bsarg=sphi/(1.0d0+0.5d0*(vbs-vdsat)/phi) >*/
L601:
bsarg = sphi / ((*vbs - mosarg_1.vdsat) * .5 / mosarg_1.phi + 1.);
/*< dbsrdb=-0.5d0*bsarg*bsarg/sphi3 >*/
dbsrdb = bsarg * -.5 * bsarg / sphi3;
/*< 602 bodys=bsarg*bsarg*bsarg-sarg3 >*/
L602:
bodys = bsarg * bsarg * bsarg - sarg3;
/*< gdbdvs=2.0d0*gammad*(bsarg*bsarg*dbsrdb-sarg*sarg*dsrgdb) >*/
gdbdvs = gammad * 2. * (bsarg * bsarg * dbsrdb - sarg * sarg * dsrgdb);
/*< if (vmax.gt.0.0d0) go to 603 >*/
if (mosarg_1.vmax > 0.) {
goto L603;
}
/*< if (xnsub.eq.0.0d0) go to 610 >*/
if (mosarg_1.xnsub == 0.) {
goto L610;
}
/*< if (xlamda.gt.0.0d0) go to 610 >*/
if (mosarg_1.xlamda > 0.) {
goto L610;
}
/*< argv=(vds-vdsat)/4.0d0 >*/
argv = (*vds - mosarg_1.vdsat) / 4.;
/*< sargv=dsqrt(1.0d0+argv*argv) >*/
sargv = sqrt(argv * argv + 1.);
/*< arg=dsqrt(argv+sargv) >*/
arg = sqrt(argv + sargv);
/*< xlfact=xd/(xl*vds) >*/
xlfact = mosarg_1.xd / (mosarg_1.xl * *vds);
/*< xlamda=xlfact*arg >*/
mosarg_1.xlamda = xlfact * arg;
/*< dldsat=vds*xlfact*arg/(8.0d0*sargv) >*/
dldsat = *vds * xlfact * arg / (sargv * 8.);
/*< go to 605 >*/
goto L605;
/*< 603 argv=(vgsx-vbin)/eta-vdsat >*/
L603:
argv = (vgsx - vbin) / eta - mosarg_1.vdsat;
/*< xdv=xd/dsqrt(xneff) >*/
xdv = mosarg_1.xd / sqrt(mosarg_1.xneff);
/*< xlv=vmax*xdv/(2.0d0*ueff) >*/
xlv = mosarg_1.vmax * xdv / (ueff * 2.);
/*< vqchan=argv-gammad*bsarg >*/
vqchan = argv - gammad * bsarg;
/*< dqdsat=-1.0d0+gammad*dbsrdb >*/
dqdsat = gammad * dbsrdb - 1.;
/*< vl=vmax*xl >*/
vl = mosarg_1.vmax * mosarg_1.xl;
/*< dfunds=vl*dqdsat-ueff*vqchan >*/
dfunds = vl * dqdsat - ueff * vqchan;
/*< dfundg=(vl-ueff*vdsat)/eta >*/
dfundg = (vl - ueff * mosarg_1.vdsat) / eta;
/*< dfundb=-vl*(1.0d0+dqdsat-factor/eta)+ >*/
/*< 1 ueff*(gdbdvs-dgdvbs*bodys/1.5d0)/eta >*/
dfundb = -vl * (dqdsat + 1. - factor / eta) + ueff * (gdbdvs - dgdvbs *
bodys / 1.5) / eta;
/*< dsdvgs=-dfundg/dfunds >*/
dsdvgs = -dfundg / dfunds;
/*< dsdvbs=-dfundb/dfunds >*/
dsdvbs = -dfundb / dfunds;
/*< if (xnsub.eq.0.0d0) go to 610 >*/
if (mosarg_1.xnsub == 0.) {
goto L610;
}
/*< if (xlamda.gt.0.0d0) go to 610 >*/
if (mosarg_1.xlamda > 0.) {
goto L610;
}
/*< argv=dmax1(vds-vdsat,0.0d0) >*/
/* Computing MAX */
d_1 = *vds - mosarg_1.vdsat;
argv = max(0.,d_1);
/*< xls=dsqrt(xlv*xlv+argv) >*/
xls = sqrt(xlv * xlv + argv);
/*< dldsat=xdv/(2.0d0*xls) >*/
dldsat = xdv / (xls * 2.);
/*< xlfact=xdv/(xl*vds) >*/
xlfact = xdv / (mosarg_1.xl * *vds);
/*< xlamda=xlfact*(xls-xlv) >*/
mosarg_1.xlamda = xlfact * (xls - xlv);
/*< dldsat=dldsat/xl >*/
dldsat /= mosarg_1.xl;
/*< 605 dldvgs=dldsat*dsdvgs >*/
L605:
dldvgs = dldsat * dsdvgs;
/*< dldvds=-xlamda+dldsat >*/
dldvds = -mosarg_1.xlamda + dldsat;
/*< dldvbs=dldsat*dsdvbs >*/
dldvbs = dldsat * dsdvbs;
/*< go to 620 >*/
goto L620;
/*< 610 dldvgs=0.0d0 >*/
L610:
dldvgs = 0.;
/*< dldvds=0.0d0 >*/
dldvds = 0.;
/*< dldvbs=0.0d0 >*/
dldvbs = 0.;
/* limit channel shortening at punch-through */
/*< 620 xwb=xd*sbiarg >*/
L620:
xwb = mosarg_1.xd * sbiarg;
/*< xld=xl-xwb >*/
mosarg_1.xld = mosarg_1.xl - xwb;
/*< clfact=1.0d0-xlamda*vds >*/
clfact = 1. - mosarg_1.xlamda * *vds;
/*< dldvds=-xlamda-dldvds >*/
dldvds = -mosarg_1.xlamda - dldvds;
/*< xleff=xl*clfact >*/
xleff = mosarg_1.xl * clfact;
/*< deltal=xlamda*vds*xl >*/
deltal = mosarg_1.xlamda * *vds * mosarg_1.xl;
/*< if (xnsub.eq.0.0d0) xwb=0.25d-6 >*/
if (mosarg_1.xnsub == 0.) {
xwb = 2.5e-7;
}
/*< if (xleff.ge.xwb) go to 700 >*/
if (xleff >= xwb) {
goto L700;
}
/*< xleff=xwb/(1.0d0+(deltal-xld)/xwb) >*/
xleff = xwb / ((deltal - mosarg_1.xld) / xwb + 1.);
/*< clfact=xleff/xl >*/
clfact = xleff / mosarg_1.xl;
/*< dfact=xleff*xleff/(xwb*xwb) >*/
dfact = xleff * xleff / (xwb * xwb);
/*< dldvgs=dfact*dldvgs >*/
dldvgs = dfact * dldvgs;
/*< dldvds=dfact*dldvds >*/
dldvds = dfact * dldvds;
/*< dldvbs=dfact*dldvbs >*/
dldvbs = dfact * dldvbs;
/* evaluate effective beta (effective kp) */
/*< 700 beta1=beta*ufact/clfact >*/
L700:
mosarg_1.beta1 = mosarg_1.beta * ufact / clfact;
/* test for mode of operation and branch appropriately */
/*< gammad=gamasd >*/
gammad = gamasd;
/*< dgdvbs=dgddvb >*/
dgdvbs = dgddvb;
/*< if (vds.gt.1.0d-8) go to 730 >*/
if (*vds > 1e-8) {
goto L730;
}
/*< if (vgs.gt.von) go to 720 >*/
if (*vgs > mosarg_1.von) {
goto L720;
}
/*< if ((xnfs.ne.0.0d0).and.(cox.ne.0.0d0)) go to 710 >*/
if (mosarg_1.xnfs != 0. && mosarg_1.cox != 0.) {
goto L710;
}
/*< gds=0.0d0 >*/
*gds = 0.;
/*< go to 1050 >*/
goto L1050;
/*< 710 gds=beta1*(von-vbin-gammad*sarg)*dexp(argg*(vgs-von)) >*/
L710:
*gds = mosarg_1.beta1 * (mosarg_1.von - vbin - gammad * sarg) * exp(argg *
(*vgs - mosarg_1.von));
/*< go to 1050 >*/
goto L1050;
/*< 720 gds=beta1*(vgs-vbin-gammad*sarg) >*/
L720:
*gds = mosarg_1.beta1 * (*vgs - vbin - gammad * sarg);
/*< go to 1050 >*/
goto L1050;
/*< 730 if (vgs.gt.von) go to 900 >*/
L730:
if (*vgs > mosarg_1.von) {
goto L900;
}
/* subthreshold region */
/*< if (vdsat.gt.0.0d0) go to 830 >*/
if (mosarg_1.vdsat > 0.) {
goto L830;
}
/*< gds=0.0d0 >*/
*gds = 0.;
/*< if (vgs.gt.vth) go to 1020 >*/
if (*vgs > vth) {
goto L1020;
}
/*< go to 1050 >*/
goto L1050;
/*< 830 vdson=dmin1(vdsat,vds) >*/
L830:
vdson = min(mosarg_1.vdsat,*vds);
/*< if (vds.le.vdsat) go to 850 >*/
if (*vds <= mosarg_1.vdsat) {
goto L850;
}
/*< barg=bsarg >*/
barg = bsarg;
/*< dbrgdb=dbsrdb >*/
dbrgdb = dbsrdb;
/*< body=bodys >*/
body = bodys;
/*< gdbdv=gdbdvs >*/
gdbdv = gdbdvs;
/*< 850 cdson=beta1*((von-vbin-eta*vdson*0.5d0)*vdson-gammad*body/1.5d0) >*/
L850:
cdson = mosarg_1.beta1 * ((mosarg_1.von - vbin - eta * vdson * .5) *
vdson - gammad * body / 1.5);
/*< didvds=beta1*(von-vbin-eta*vdson-gammad*barg) >*/
didvds = mosarg_1.beta1 * (mosarg_1.von - vbin - eta * vdson - gammad *
barg);
/*< gdson=-cdson*dldvds/clfact-beta1*dgdvds*body/1.5d0 >*/
gdson = -cdson * dldvds / clfact - mosarg_1.beta1 * dgdvds * body / 1.5;
/*< if (vds.lt.vdsat) gdson=gdson+didvds >*/
if (*vds < mosarg_1.vdsat) {
gdson += didvds;
}
/*< gbson=-cdson*dldvbs/clfact >*/
/*< 1 +beta1*(dodvbs*vdson+factor*vdson-dgdvbs*body/1.5d0-gdbdv) >*/
gbson = -cdson * dldvbs / clfact + mosarg_1.beta1 * (dodvbs * vdson +
factor * vdson - dgdvbs * body / 1.5 - gdbdv);
/*< if (vds.gt.vdsat) gbson=gbson+didvds*dsdvbs >*/
if (*vds > mosarg_1.vdsat) {
gbson += didvds * dsdvbs;
}
/*< expg=dexp(argg*(vgs-von)) >*/
expg = exp(argg * (*vgs - mosarg_1.von));
/*< cdrain=cdson*expg >*/
mosarg_1.cdrain = cdson * expg;
/*< gmw=cdrain*argg >*/
gmw = mosarg_1.cdrain * argg;
/*< gm=gmw >*/
*gm = gmw;
/*< if (vds.gt.vdsat) gm=gmw+didvds*dsdvgs*expg >*/
if (*vds > mosarg_1.vdsat) {
*gm = gmw + didvds * dsdvgs * expg;
}
/*< gds=gdson*expg-gm*dodvds-gmw*(vgs-von)*dxndvd/xn >*/
*gds = gdson * expg - *gm * dodvds - gmw * (*vgs - mosarg_1.von) * dxndvd
/ xn;
/*< gmbs=gbson*expg-gm*dodvbs-gmw*(vgs-von)*dxndvb/xn >*/
*gmbs = gbson * expg - *gm * dodvbs - gmw * (*vgs - mosarg_1.von) *
dxndvb / xn;
/*< go to 1020 >*/
goto L1020;
/*< 900 if (vds.gt.vdsat) go to 1000 >*/
L900:
if (*vds > mosarg_1.vdsat) {
goto L1000;
}
/* linear region */
/*< cdrain=beta1*((vgs-vbin-eta*vds/2.0d0)*vds-gammad*body/1.5d0) >*/
mosarg_1.cdrain = mosarg_1.beta1 * ((*vgs - vbin - eta * *vds / 2.) * *
vds - gammad * body / 1.5);
/*< arg=cdrain*(dudvgs/ufact-dldvgs/clfact) >*/
arg = mosarg_1.cdrain * (dudvgs / ufact - dldvgs / clfact);
/*< gm=arg+beta1*vds >*/
*gm = arg + mosarg_1.beta1 * *vds;
/*< arg=cdrain*(dudvds/ufact-dldvds/clfact) >*/
arg = mosarg_1.cdrain * (dudvds / ufact - dldvds / clfact);
/*< gds=arg+beta1*(vgs-vbin-eta*vds- >*/
/*< 1 gammad*barg-dgdvds*body/1.5d0) >*/
*gds = arg + mosarg_1.beta1 * (*vgs - vbin - eta * *vds - gammad * barg -
dgdvds * body / 1.5);
/*< arg=cdrain*(dudvbs/ufact-dldvbs/clfact) >*/
arg = mosarg_1.cdrain * (dudvbs / ufact - dldvbs / clfact);
/*< gmbs=arg-beta1*(gdbdv+dgdvbs*body/1.5d0-factor*vds) >*/
*gmbs = arg - mosarg_1.beta1 * (gdbdv + dgdvbs * body / 1.5 - factor * *
vds);
/*< go to 1020 >*/
goto L1020;
/* saturation region */
/*< 1000 cdrain=beta1*((vgs-vbin-eta*vdsat/2.0d0)*vdsat-gammad*bodys/1.5d0) >*/
L1000:
mosarg_1.cdrain = mosarg_1.beta1 * ((*vgs - vbin - eta * mosarg_1.vdsat /
2.) * mosarg_1.vdsat - gammad * bodys / 1.5);
/*< arg=cdrain*(dudvgs/ufact-dldvgs/clfact) >*/
arg = mosarg_1.cdrain * (dudvgs / ufact - dldvgs / clfact);
/*< gm=arg+beta1*vdsat+ >*/
/*< 1 beta1*(vgs-vbin-eta*vdsat-gammad*bsarg)*dsdvgs >*/
*gm = arg + mosarg_1.beta1 * mosarg_1.vdsat + mosarg_1.beta1 * (*vgs -
vbin - eta * mosarg_1.vdsat - gammad * bsarg) * dsdvgs;
/*< gds=-cdrain*dldvds/clfact-beta1*dgdvds*bodys/1.5d0 >*/
*gds = -mosarg_1.cdrain * dldvds / clfact - mosarg_1.beta1 * dgdvds *
bodys / 1.5;
/*< arg=cdrain*(dudvbs/ufact-dldvbs/clfact) >*/
arg = mosarg_1.cdrain * (dudvbs / ufact - dldvbs / clfact);
/*< gmbs=arg-beta1*(gdbdvs+dgdvbs*bodys/1.5d0-factor*vdsat)+ >*/
/*< 1 beta1*(vgs-vbin-eta*vdsat-gammad*bsarg)*dsdvbs >*/
*gmbs = arg - mosarg_1.beta1 * (gdbdvs + dgdvbs * bodys / 1.5 - factor *
mosarg_1.vdsat) + mosarg_1.beta1 * (*vgs - vbin - eta *
mosarg_1.vdsat - gammad * bsarg) * dsdvbs;
/* compute charges for "on" region */
/*< 1020 if (icharg.eq.0) go to 1500 >*/
L1020:
if (icharg == 0) {
goto L1500;
}
/*< if (vgs.le.vth) go to 1070 >*/
if (*vgs <= vth) {
goto L1070;
}
/*< call mqspof(vds,vbs,vgs,vpof,vdsat1,vth,vbin,gamasd, >*/
/*< 1 qg,qc,qb,cggb,cgdb,cgsb,cbgb,cbdb,cbsb) >*/
mqspof_(vds, vbs, vgs, &vpof, &vdsat1, &vth, &vbin, &gamasd, qg, qc, qb,
cggb, cgdb, cgsb, cbgb, cbdb, cbsb);
/*< go to 2000 >*/
goto L2000;
/* finish special cases */
/*< 1050 cdrain=0.0d0 >*/
L1050:
mosarg_1.cdrain = 0.;
/*< gm=0.0d0 >*/
*gm = 0.;
/*< gmbs=0.0d0 >*/
*gmbs = 0.;
/*< 1070 xqc=xqco >*/
L1070:
mosarg_1.xqc = mosarg_1.xqco;
/*< if (icharg.eq.0) go to 1500 >*/
if (icharg == 0) {
goto L1500;
}
/*< call mosq2(vds,vbs,vgs,vdsat,vth,vbin,gamasd,cox,phi, >*/
/*< 1 qg,qc,qb,cggb,cgdb,cgsb,cbgb,cbdb,cbsb) >*/
mosq2_(vds, vbs, vgs, &mosarg_1.vdsat, &vth, &vbin, &gamasd, &
mosarg_1.cox, &mosarg_1.phi, qg, qc, qb, cggb, cgdb, cgsb, cbgb,
cbdb, cbsb);
/*< qspof=0.0d0 >*/
mosarg_1.qspof = 0.;
/*< go to 2000 >*/
goto L2000;
/* finished */
/*< 1500 qg=0.0d0 >*/
L1500:
*qg = 0.;
/*< qb=0.0d0 >*/
*qb = 0.;
/*< qc=0.0d0 >*/
*qc = 0.;
/*< qspof=0.0d0 >*/
mosarg_1.qspof = 0.;
/*< 2000 return >*/
L2000:
return 0;
/*< end >*/
} /* moseq2_ */